home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / GL / flight / color.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  17KB  |  490 lines

  1. /*
  2.  * Copyright 1984-1991, 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17.  
  18. /*
  19.  *  flight/color.c $Revision: 1.4 $
  20.  */
  21.  
  22. #include "flight.h"
  23.  
  24. short ci_table[64];
  25. unsigned long cpack_table[64];
  26. short rgb_table[64][3];
  27.  
  28. static short pupmap[3][3];
  29. static short normmap[64][3];
  30.  
  31.  
  32. #define LOAD_RGB_TABLE(i, r, g, b)    \
  33. {                    \
  34.     rgb_table[i][0] = r;        \
  35.     rgb_table[i][1] = g;        \
  36.     rgb_table[i][2] = b;        \
  37. }
  38.  
  39. #define GET_RGB(i)    rgb_table[i][0], rgb_table[i][1], rgb_table[i][2]
  40.  
  41. #define SCALE_RGB(i, s)    (rgb_table[i][0] / s), \
  42.             (rgb_table[i][1] / s), \
  43.             (rgb_table[i][2] / s)
  44.  
  45. #define ADD_RGB(i, j, s)  MIN((rgb_table[i][0]+rgb_table[j][0]/s), 0xff), \
  46.               MIN((rgb_table[i][1]+rgb_table[j][1]/s), 0xff), \
  47.               MIN((rgb_table[i][2]+rgb_table[j][2]/s), 0xff)
  48.  
  49. void setup_colormaps()
  50. {
  51.     char mapfname[80],decfname[80];
  52.  
  53. ortho2(-0.5, xmaxwindow+0.5, -0.5, ymaxwindow+0.5); /*XXX*/
  54.  
  55.     init_color_tables();
  56.  
  57.     if (in_cmode)
  58.     {
  59.     init_normal_colormap(1.0);
  60.     }
  61.  
  62.     drawmode(over_drawmode);
  63.     if (in_cmode & new_inst)
  64.     {
  65.     mapcolor(P_GREY1, RGB_GREY_12);
  66.     mapcolor(P_GREY2, RGB_GREY_9);
  67.     mapcolor(P_MARKINGS, RGB_GREY_5);
  68.     }
  69.     else
  70.     mapcolor(P_ORANGE, RGB_ORANGE);
  71.  
  72.     if (bits_under)
  73.     {
  74.     drawmode(UNDERDRAW);
  75.     mapcolor(0, 0, 0, 0);                /* 0    */
  76.     if (!new_inst)
  77.         mapcolor(U_BROWN, 96, 80, 64);        /* 1    */
  78.     else
  79.     {
  80.         mapcolor(U_INST, 50, 50, 50);        /* 1    */
  81.         mapcolor(U_MARKINGS, 200, 200, 200);
  82.     }
  83.     }
  84.  
  85.     drawmode(NORMALDRAW);
  86.  
  87.     gflush();
  88. }
  89.  
  90.  
  91. void init_color_tables()
  92. {
  93.     load_rgb_table(C_BLACK, RGB_BLACK);
  94.     load_rgb_table(C_WHITE, RGB_WHITE);
  95.     load_rgb_table(C_RED, RGB_RED);
  96.     load_rgb_table(C_DRED, RGB_DRED);
  97.     load_rgb_table(C_GREEN, RGB_GREEN);
  98.     load_rgb_table(C_BLUE, RGB_BLUE);
  99.     load_rgb_table(C_YELLOW, RGB_YELLOW);
  100.     load_rgb_table(C_ORANGE, RGB_ORANGE);
  101.     load_rgb_table(C_INST_BROWN, RGB_INST_BROWN);
  102.     load_rgb_table(C_HBLUE, RGB_HBLUE);
  103.     load_rgb_table(C_GREY, RGB_GREY);
  104.     load_rgb_table(C_MC_FLAME, RGB_MC_FLAME);
  105.     load_rgb_table(C_MC_TRAIL, RGB_MC_TRAIL);
  106.     load_rgb_table(C_DIRT, RGB_DIRT);
  107.     load_rgb_table(C_SWAMP, RGB_SWAMP);
  108.     load_rgb_table(C_SKY, RGB_SKY);
  109.     load_rgb_table(C_GREY_0, RGB_GREY_0);
  110.     load_rgb_table(C_GREY_1, RGB_GREY_1);
  111.     load_rgb_table(C_GREY_2, RGB_GREY_2);
  112.     load_rgb_table(C_GREY_3, RGB_GREY_3);
  113.     load_rgb_table(C_GREY_4, RGB_GREY_4);
  114.     load_rgb_table(C_GREY_5, RGB_GREY_5);
  115.     load_rgb_table(C_GREY_6, RGB_GREY_6);
  116.     load_rgb_table(C_GREY_7, RGB_GREY_7);
  117.     load_rgb_table(C_GREY_8, RGB_GREY_8);
  118.     load_rgb_table(C_GREY_9, RGB_GREY_9);
  119.     load_rgb_table(C_GREY_10, RGB_GREY_10);
  120.     load_rgb_table(C_GREY_11, RGB_GREY_11);
  121.     load_rgb_table(C_GREY_12, RGB_GREY_12);
  122.     load_rgb_table(C_SILVER_0, RGB_SILVER_0);
  123.     load_rgb_table(C_SILVER_1, RGB_SILVER_1);
  124.     load_rgb_table(C_SILVER_2, RGB_SILVER_2);
  125.     load_rgb_table(C_SILVER_3, RGB_SILVER_3);
  126.     load_rgb_table(C_SILVER_4, RGB_SILVER_4);
  127.     load_rgb_table(C_SILVER_5, RGB_SILVER_5);
  128.     load_rgb_table(C_SILVER_6, RGB_SILVER_6);
  129.     load_rgb_table(C_SILVER_7, RGB_SILVER_7);
  130.     load_rgb_table(C_SILVER_8, RGB_SILVER_8);
  131.     load_rgb_table(C_SILVER_9, RGB_SILVER_9);
  132.     load_rgb_table(C_PURPLE_0, RGB_PURPLE_0);
  133.     load_rgb_table(C_PURPLE_1, RGB_PURPLE_1);
  134.     load_rgb_table(C_PURPLE_2, RGB_PURPLE_2);
  135.     load_rgb_table(C_PURPLE_3, RGB_PURPLE_3);
  136.     load_rgb_table(C_PURPLE_4, RGB_PURPLE_4);
  137.     load_rgb_table(C_LIME_0, RGB_LIME_0);
  138.     load_rgb_table(C_LIME_1, RGB_LIME_1);
  139.     load_rgb_table(C_LIME_2, RGB_LIME_2);
  140.     load_rgb_table(C_LIME_3, RGB_LIME_3);
  141.     load_rgb_table(C_LIME_4, RGB_LIME_4);
  142.     load_rgb_table(C_TAN_0, RGB_TAN_0);
  143.     load_rgb_table(C_TAN_1, RGB_TAN_1);
  144.     load_rgb_table(C_TAN_2, RGB_TAN_2);
  145.     load_rgb_table(C_TAN_3, RGB_TAN_3);
  146.     load_rgb_table(C_TAN_4, RGB_TAN_4);
  147.     load_rgb_table(C_ORANGE_0, RGB_ORANGE_0);
  148.     load_rgb_table(C_ORANGE_1, RGB_ORANGE_1);
  149.     load_rgb_table(C_ORANGE_2, RGB_ORANGE_2);
  150.     load_rgb_table(C_ORANGE_3, RGB_ORANGE_3);
  151.     load_rgb_table(C_ORANGE_4, RGB_ORANGE_4);
  152.  
  153.     if (in_cmode)
  154.     {
  155.     if (bits_cmode >= 6)
  156.     {
  157.         ci_table[C_BLACK] = C_BLACK;
  158.         ci_table[C_WHITE] = C_WHITE;
  159.         ci_table[C_RED] = C_RED;
  160.         ci_table[C_DRED] = C_DRED;
  161.         ci_table[C_GREEN] = C_GREEN;
  162.         ci_table[C_BLUE] = C_BLUE;
  163.         ci_table[C_YELLOW] = C_YELLOW;
  164.         ci_table[C_ORANGE] = C_ORANGE;
  165.         ci_table[C_INST_BROWN] = C_INST_BROWN;
  166.         ci_table[C_HBLUE] = C_HBLUE;
  167.         ci_table[C_GREY] = C_GREY;
  168.         ci_table[C_MC_FLAME] = C_MC_FLAME;
  169.         ci_table[C_MC_TRAIL] = C_MC_TRAIL;
  170.         ci_table[C_DIRT] = C_DIRT;
  171.         ci_table[C_SWAMP] = C_SWAMP;
  172.         ci_table[C_SKY] = C_SKY;
  173.         ci_table[C_GREY_0] = C_GREY_0;
  174.         ci_table[C_GREY_1] = C_GREY_1;
  175.         ci_table[C_GREY_2] = C_GREY_2;
  176.         ci_table[C_GREY_3] = C_GREY_3;
  177.         ci_table[C_GREY_4] = C_GREY_4;
  178.         ci_table[C_GREY_5] = C_GREY_5;
  179.         ci_table[C_GREY_6] = C_GREY_6;
  180.         ci_table[C_GREY_7] = C_GREY_7;
  181.         ci_table[C_GREY_8] = C_GREY_8;
  182.         ci_table[C_GREY_9] = C_GREY_9;
  183.         ci_table[C_GREY_10] = C_GREY_10;
  184.         ci_table[C_GREY_11] = C_GREY_11;
  185.         ci_table[C_GREY_12] = C_GREY_12;
  186.         ci_table[C_SILVER_0] = C_SILVER_0;
  187.         ci_table[C_SILVER_1] = C_SILVER_1;
  188.         ci_table[C_SILVER_2] = C_SILVER_2;
  189.         ci_table[C_SILVER_3] = C_SILVER_3;
  190.         ci_table[C_SILVER_4] = C_SILVER_4;
  191.         ci_table[C_SILVER_5] = C_SILVER_5;
  192.         ci_table[C_SILVER_6] = C_SILVER_6;
  193.         ci_table[C_SILVER_7] = C_SILVER_7;
  194.         ci_table[C_SILVER_8] = C_SILVER_8;
  195.         ci_table[C_SILVER_9] = C_SILVER_9;
  196.         ci_table[C_PURPLE_0] = C_PURPLE_0;
  197.         ci_table[C_PURPLE_1] = C_PURPLE_1;
  198.         ci_table[C_PURPLE_2] = C_PURPLE_2;
  199.         ci_table[C_PURPLE_3] = C_PURPLE_3;
  200.         ci_table[C_PURPLE_4] = C_PURPLE_4;
  201.         ci_table[C_LIME_0] = C_LIME_0;
  202.         ci_table[C_LIME_1] = C_LIME_1;
  203.         ci_table[C_LIME_2] = C_LIME_2;
  204.         ci_table[C_LIME_3] = C_LIME_3;
  205.         ci_table[C_LIME_4] = C_LIME_4;
  206.         ci_table[C_TAN_0] = C_TAN_0;
  207.         ci_table[C_TAN_1] = C_TAN_1;
  208.         ci_table[C_TAN_2] = C_TAN_2;
  209.         ci_table[C_TAN_3] = C_TAN_3;
  210.         ci_table[C_TAN_4] = C_TAN_4;
  211.         ci_table[C_ORANGE_0] = C_ORANGE_0;
  212.         ci_table[C_ORANGE_1] = C_ORANGE_1;
  213.         ci_table[C_ORANGE_2] = C_ORANGE_2;
  214.         ci_table[C_ORANGE_3] = C_ORANGE_3;
  215.         ci_table[C_ORANGE_4] = C_ORANGE_4;
  216.     }
  217.     else /* use 4 bit color map */
  218.     {
  219.         ci_table[C_BLACK] = SC_BLACK;
  220.         ci_table[C_WHITE] = SC_WHITE;
  221.         ci_table[C_RED] = SC_RED;
  222.         ci_table[C_DRED] = SC_BLACK;
  223.         ci_table[C_GREEN] = SC_GREEN;
  224.         ci_table[C_BLUE] = SC_BLUE;
  225.         ci_table[C_YELLOW] = SC_ORANGE;
  226.         ci_table[C_ORANGE] = SC_ORANGE;
  227.         ci_table[C_INST_BROWN] = SC_GREY;
  228.         ci_table[C_HBLUE] = SC_BLUE;
  229.         ci_table[C_GREY] = SC_GREY;
  230.         ci_table[C_MC_FLAME] = SC_GREY_0;
  231.         ci_table[C_MC_TRAIL] = SC_GREY_1;
  232.         ci_table[C_DIRT] = SC_DIRT;
  233.         ci_table[C_SWAMP] = SC_SWAMP;
  234.         ci_table[C_SKY] = SC_SKY;
  235.         ci_table[C_GREY_0] = SC_GREY_0;
  236.         ci_table[C_GREY_1] = SC_GREY_0;
  237.         ci_table[C_GREY_2] = SC_GREY_1;
  238.         ci_table[C_GREY_3] = SC_GREY_1;
  239.         ci_table[C_GREY_4] = SC_GREY_1;
  240.         ci_table[C_GREY_5] = SC_GREY_2;
  241.         ci_table[C_GREY_6] = SC_GREY_2;
  242.         ci_table[C_GREY_7] = SC_GREY_2;
  243.         ci_table[C_GREY_8] = SC_GREY_3;
  244.         ci_table[C_GREY_9] = SC_GREY_3;
  245.         ci_table[C_GREY_10] = SC_GREY_3;
  246.         ci_table[C_GREY_11] = SC_GREY_3;
  247.         ci_table[C_GREY_12] = SC_GREY_3;
  248.         ci_table[C_SILVER_0] = SC_GREY_0;
  249.         ci_table[C_SILVER_1] = SC_GREY_0;
  250.         ci_table[C_SILVER_2] = SC_GREY_1;
  251.         ci_table[C_SILVER_3] = SC_GREY_1;
  252.         ci_table[C_SILVER_4] = SC_GREY_1;
  253.         ci_table[C_SILVER_5] = SC_GREY_2;
  254.         ci_table[C_SILVER_6] = SC_GREY_2;
  255.         ci_table[C_SILVER_7] = SC_GREY_2;
  256.         ci_table[C_SILVER_8] = SC_GREY_3;
  257.         ci_table[C_SILVER_9] = SC_GREY_3;
  258.         ci_table[C_PURPLE_0] = SC_PURPLE_0;
  259.         ci_table[C_PURPLE_1] = SC_PURPLE_0;
  260.         ci_table[C_PURPLE_2] = SC_PURPLE_0;
  261.         ci_table[C_PURPLE_3] = SC_PURPLE_1;
  262.         ci_table[C_PURPLE_4] = SC_PURPLE_1;
  263.         ci_table[C_LIME_0] = SC_GREY_0;
  264.         ci_table[C_LIME_1] = SC_GREY_1;
  265.         ci_table[C_LIME_2] = SC_GREY_2;
  266.         ci_table[C_LIME_3] = SC_GREY_3;
  267.         ci_table[C_LIME_4] = SC_GREY_3;
  268.         ci_table[C_TAN_0] = SC_GREY_0;
  269.         ci_table[C_TAN_1] = SC_GREY_1;
  270.         ci_table[C_TAN_2] = SC_GREY_2;
  271.         ci_table[C_TAN_3] = SC_GREY_3;
  272.         ci_table[C_TAN_4] = SC_GREY_3;
  273.         ci_table[C_ORANGE_0] = SC_GREY_0;
  274.         ci_table[C_ORANGE_1] = SC_GREY_1;
  275.         ci_table[C_ORANGE_2] = SC_GREY_2;
  276.         ci_table[C_ORANGE_3] = SC_GREY_3;
  277.         ci_table[C_ORANGE_4] = SC_GREY_3;
  278.     }
  279.     }
  280.     else
  281.     {
  282.     int i;
  283.  
  284. #if 1
  285.     for (i = 0; i < 64; i++)
  286.         cpack_table[i] = rgb2cpack(GET_RGB(i));
  287. #else
  288.     cpack_table[C_BLACK] = rgb2cpack(RGB_BLACK);
  289.     cpack_table[C_WHITE] = rgb2cpack(RGB_WHITE);
  290.     cpack_table[C_RED] = rgb2cpack(RGB_RED);
  291.     cpack_table[C_DRED] = rgb2cpack(RGB_DRED);
  292.     cpack_table[C_GREEN] = rgb2cpack(RGB_GREEN);
  293.     cpack_table[C_BLUE] = rgb2cpack(RGB_BLUE);
  294.     cpack_table[C_YELLOW] = rgb2cpack(RGB_YELLOW);
  295.     cpack_table[C_ORANGE] = rgb2cpack(RGB_ORANGE);
  296.     cpack_table[C_INST_BROWN] = rgb2cpack(RGB_INST_BROWN);
  297.     cpack_table[C_HBLUE] = rgb2cpack(RGB_HBLUE);
  298.     cpack_table[C_GREY] = rgb2cpack(RGB_GREY);
  299.     cpack_table[C_MC_FLAME] = rgb2cpack(RGB_MC_FLAME);
  300.     cpack_table[C_MC_TRAIL] = rgb2cpack(RGB_MC_TRAIL);
  301.     cpack_table[C_DIRT] = rgb2cpack(RGB_DIRT);
  302.     cpack_table[C_SWAMP] = rgb2cpack(RGB_SWAMP);
  303.     cpack_table[C_SKY] = rgb2cpack(RGB_SKY);
  304.     cpack_table[C_GREY_0] = rgb2cpack(RGB_GREY_0);
  305.     cpack_table[C_GREY_1] = rgb2cpack(RGB_GREY_1);
  306.     cpack_table[C_GREY_2] = rgb2cpack(RGB_GREY_2);
  307.     cpack_table[C_GREY_3] = rgb2cpack(RGB_GREY_3);
  308.     cpack_table[C_GREY_4] = rgb2cpack(RGB_GREY_4);
  309.     cpack_table[C_GREY_5] = rgb2cpack(RGB_GREY_5);
  310.     cpack_table[C_GREY_6] = rgb2cpack(RGB_GREY_6);
  311.     cpack_table[C_GREY_7] = rgb2cpack(RGB_GREY_7);
  312.     cpack_table[C_GREY_8] = rgb2cpack(RGB_GREY_8);
  313.     cpack_table[C_GREY_9] = rgb2cpack(RGB_GREY_9);
  314.     cpack_table[C_GREY_10] = rgb2cpack(RGB_GREY_10);
  315.     cpack_table[C_GREY_11] = rgb2cpack(RGB_GREY_11);
  316.     cpack_table[C_GREY_12] = rgb2cpack(RGB_GREY_12);
  317.     cpack_table[C_SILVER_0] = rgb2cpack(RGB_SILVER_0);
  318.     cpack_table[C_SILVER_1] = rgb2cpack(RGB_SILVER_1);
  319.     cpack_table[C_SILVER_2] = rgb2cpack(RGB_SILVER_2);
  320.     cpack_table[C_SILVER_3] = rgb2cpack(RGB_SILVER_3);
  321.     cpack_table[C_SILVER_4] = rgb2cpack(RGB_SILVER_4);
  322.     cpack_table[C_SILVER_5] = rgb2cpack(RGB_SILVER_5);
  323.     cpack_table[C_SILVER_6] = rgb2cpack(RGB_SILVER_6);
  324.     cpack_table[C_SILVER_7] = rgb2cpack(RGB_SILVER_7);
  325.     cpack_table[C_SILVER_8] = rgb2cpack(RGB_SILVER_8);
  326.     cpack_table[C_SILVER_9] = rgb2cpack(RGB_SILVER_9);
  327.     cpack_table[C_PURPLE_0] = rgb2cpack(RGB_PURPLE_0);
  328.     cpack_table[C_PURPLE_1] = rgb2cpack(RGB_PURPLE_1);
  329.     cpack_table[C_PURPLE_2] = rgb2cpack(RGB_PURPLE_2);
  330.     cpack_table[C_PURPLE_3] = rgb2cpack(RGB_PURPLE_3);
  331.     cpack_table[C_PURPLE_4] = rgb2cpack(RGB_PURPLE_4);
  332.     cpack_table[C_LIME_0] = rgb2cpack(RGB_LIME_0);
  333.     cpack_table[C_LIME_1] = rgb2cpack(RGB_LIME_1);
  334.     cpack_table[C_LIME_2] = rgb2cpack(RGB_LIME_2);
  335.     cpack_table[C_LIME_3] = rgb2cpack(RGB_LIME_3);
  336.     cpack_table[C_LIME_4] = rgb2cpack(RGB_LIME_4);
  337.     cpack_table[C_TAN_0] = rgb2cpack(RGB_TAN_0);
  338.     cpack_table[C_TAN_1] = rgb2cpack(RGB_TAN_1);
  339.     cpack_table[C_TAN_2] = rgb2cpack(RGB_TAN_2);
  340.     cpack_table[C_TAN_3] = rgb2cpack(RGB_TAN_3);
  341.     cpack_table[C_TAN_4] = rgb2cpack(RGB_TAN_4);
  342.     cpack_table[C_ORANGE_0] = rgb2cpack(RGB_ORANGE_0);
  343.     cpack_table[C_ORANGE_1] = rgb2cpack(RGB_ORANGE_1);
  344.     cpack_table[C_ORANGE_2] = rgb2cpack(RGB_ORANGE_2);
  345.     cpack_table[C_ORANGE_3] = rgb2cpack(RGB_ORANGE_3);
  346.     cpack_table[C_ORANGE_4] = rgb2cpack(RGB_ORANGE_4);
  347. #endif
  348.     }
  349. }
  350.  
  351.  
  352. void init_normal_colormap(float div)
  353. {
  354.     static old_div = -1;
  355.  
  356.     if (div == old_div)
  357.     return;
  358.  
  359.     if (bits_cmode >= 6)
  360.     {
  361.     mapcolor(C_BLACK,    RGB_BLACK);
  362.     mapcolor(C_WHITE,    RGB_WHITE);
  363.     mapcolor(C_RED,        RGB_RED);
  364.     mapcolor(C_DRED,    RGB_DRED);
  365.     mapcolor(C_GREEN,    RGB_GREEN);
  366.     mapcolor(C_BLUE,    RGB_BLUE);
  367.     mapcolor(C_YELLOW,    RGB_YELLOW);
  368.     mapcolor(C_ORANGE,    RGB_ORANGE);
  369.     mapcolor(C_INST_BROWN,    RGB_INST_BROWN);
  370.     mapcolor(C_HBLUE,    RGB_HBLUE);
  371.     mapcolor(C_GREY,    RGB_GREY);
  372.     mapcolor(C_MC_FLAME,    ADD_RGB(C_MC_FLAME, C_MC_TRAIL, div));
  373.     mapcolor(C_MC_TRAIL,    SCALE_RGB(C_MC_TRAIL, div));
  374.     mapcolor(C_DIRT,    SCALE_RGB(C_DIRT, div));
  375.     mapcolor(C_SWAMP,    SCALE_RGB(C_SWAMP, div));
  376.     mapcolor(C_SKY,        SCALE_RGB(C_SKY, div));
  377.     mapcolor(C_GREY_0,    SCALE_RGB(C_GREY_0, div));
  378.     mapcolor(C_GREY_1,    SCALE_RGB(C_GREY_1, div));
  379.     mapcolor(C_GREY_2,    SCALE_RGB(C_GREY_2, div));
  380.     mapcolor(C_GREY_3,    SCALE_RGB(C_GREY_3, div));
  381.     mapcolor(C_GREY_4,    SCALE_RGB(C_GREY_4, div));
  382.     mapcolor(C_GREY_5,    SCALE_RGB(C_GREY_5, div));
  383.     mapcolor(C_GREY_6,    SCALE_RGB(C_GREY_6, div));
  384.     mapcolor(C_GREY_7,    SCALE_RGB(C_GREY_7, div));
  385.     mapcolor(C_GREY_8,    SCALE_RGB(C_GREY_8, div));
  386.     mapcolor(C_GREY_9,    SCALE_RGB(C_GREY_9, div));
  387.     mapcolor(C_GREY_10,    SCALE_RGB(C_GREY_10, div));
  388.     mapcolor(C_GREY_11,    SCALE_RGB(C_GREY_11, div));
  389.     mapcolor(C_GREY_12,    SCALE_RGB(C_GREY_12, div));
  390.     mapcolor(C_SILVER_0,    SCALE_RGB(C_SILVER_0, div));
  391.     mapcolor(C_SILVER_1,    SCALE_RGB(C_SILVER_1, div));
  392.     mapcolor(C_SILVER_2,    SCALE_RGB(C_SILVER_2, div));
  393.     mapcolor(C_SILVER_3,    SCALE_RGB(C_SILVER_3, div));
  394.     mapcolor(C_SILVER_4,    SCALE_RGB(C_SILVER_4, div));
  395.     mapcolor(C_SILVER_5,    SCALE_RGB(C_SILVER_5, div));
  396.     mapcolor(C_SILVER_6,    SCALE_RGB(C_SILVER_6, div));
  397.     mapcolor(C_SILVER_7,    SCALE_RGB(C_SILVER_7, div));
  398.     mapcolor(C_SILVER_8,    SCALE_RGB(C_SILVER_8, div));
  399.     mapcolor(C_SILVER_9,    SCALE_RGB(C_SILVER_9, div));
  400.     mapcolor(C_PURPLE_0,    SCALE_RGB(C_PURPLE_0, div));
  401.     mapcolor(C_PURPLE_1,    SCALE_RGB(C_PURPLE_1, div));
  402.     mapcolor(C_PURPLE_2,    SCALE_RGB(C_PURPLE_2, div));
  403.     mapcolor(C_PURPLE_3,    SCALE_RGB(C_PURPLE_3, div));
  404.     mapcolor(C_PURPLE_4,    SCALE_RGB(C_PURPLE_4, div));
  405.     mapcolor(C_LIME_0,    SCALE_RGB(C_LIME_0, div));
  406.     mapcolor(C_LIME_1,    SCALE_RGB(C_LIME_1, div));
  407.     mapcolor(C_LIME_2,    SCALE_RGB(C_LIME_2, div));
  408.     mapcolor(C_LIME_3,    SCALE_RGB(C_LIME_3, div));
  409.     mapcolor(C_LIME_4,    SCALE_RGB(C_LIME_4, div));
  410.     mapcolor(C_TAN_0,    SCALE_RGB(C_TAN_0, div));
  411.     mapcolor(C_TAN_1,    SCALE_RGB(C_TAN_1, div));
  412.     mapcolor(C_TAN_2,    SCALE_RGB(C_TAN_2, div));
  413.     mapcolor(C_TAN_3,    SCALE_RGB(C_TAN_3, div));
  414.     mapcolor(C_TAN_4,    SCALE_RGB(C_TAN_4, div));
  415.     mapcolor(C_ORANGE_0,    SCALE_RGB(C_ORANGE_0, div));
  416.     mapcolor(C_ORANGE_1,    SCALE_RGB(C_ORANGE_1, div));
  417.     mapcolor(C_ORANGE_2,    SCALE_RGB(C_ORANGE_2, div));
  418.     mapcolor(C_ORANGE_3,    SCALE_RGB(C_ORANGE_3, div));
  419.     mapcolor(C_ORANGE_4,    SCALE_RGB(C_ORANGE_4, div));
  420.     }
  421.     else /* use 4 bit color map */
  422.     {
  423.     mapcolor(SC_BLACK,    RGB_BLACK);
  424.     mapcolor(SC_WHITE,    RGB_WHITE);
  425.     mapcolor(SC_RED,    RGB_RED);
  426.     mapcolor(SC_GREEN,    RGB_GREEN);
  427.     mapcolor(SC_BLUE,    RGB_BLUE);
  428.     mapcolor(SC_ORANGE,    RGB_ORANGE);
  429.     mapcolor(SC_GREY,    RGB_GREY);
  430.     mapcolor(SC_DIRT,    SCALE_RGB(C_DIRT, div));
  431.     mapcolor(SC_SWAMP,    SCALE_RGB(C_SWAMP, div));
  432.     mapcolor(SC_SKY,    SCALE_RGB(C_SKY, div));
  433.     mapcolor(SC_GREY_0,    SCALE_RGB(C_GREY_0, div));
  434.     mapcolor(SC_GREY_1,    SCALE_RGB(C_GREY_2, div));
  435.     mapcolor(SC_GREY_2,    SCALE_RGB(C_GREY_5, div));
  436.     mapcolor(SC_GREY_3,    SCALE_RGB(C_GREY_8, div));
  437.     mapcolor(SC_PURPLE_0,    SCALE_RGB(C_PURPLE_1, div));
  438.     mapcolor(SC_PURPLE_1,    SCALE_RGB(C_PURPLE_3, div));
  439.     }
  440. }
  441.  
  442.  
  443. void save_map()
  444. {
  445.     int i;
  446.  
  447.     drawmode(PUPDRAW);
  448.     getmcolor(1, &pupmap[0][0], &pupmap[0][1], &pupmap[0][2]);
  449.     getmcolor(2, &pupmap[1][0], &pupmap[1][1], &pupmap[1][2]);
  450.     getmcolor(3, &pupmap[2][0], &pupmap[2][1], &pupmap[2][2]);
  451.     drawmode(NORMALDRAW);
  452.  
  453.     if (in_cmode)
  454.     for (i=0; i < (1<<bits_cmode); i++)
  455.         getmcolor(i, &normmap[i][0], &normmap[i][1], &normmap[i][2]);
  456. }
  457.  
  458.  
  459. void restore_map()
  460. {
  461.     int i;
  462.  
  463.     drawmode(PUPDRAW);
  464.     mapcolor(1, pupmap[0][0], pupmap[0][1], pupmap[0][2]);
  465.     mapcolor(2, pupmap[1][0], pupmap[1][1], pupmap[1][2]);
  466.     mapcolor(3, pupmap[2][0], pupmap[2][1], pupmap[2][2]);
  467.     drawmode(NORMALDRAW);
  468.  
  469.     if (in_cmode)
  470.     {
  471.     glcompat(GLC_SLOWMAPCOLORS, 1);
  472.     for (i=0; i < (1<<bits_cmode); i++)
  473.         mapcolor(i, normmap[i][0], normmap[i][1], normmap[i][2]);
  474.     }
  475. }
  476.  
  477.  
  478. unsigned long rgb2cpack(short r, short g, short b)
  479. {
  480.     return((0xff000000) | (b << 16) | (g <<  8) | (r));
  481. }
  482.  
  483.  
  484. void load_rgb_table(int i, short r, short g, short b)
  485. {
  486.     rgb_table[i][0] = r;
  487.     rgb_table[i][1] = g;
  488.     rgb_table[i][2] = b;
  489. }
  490.